Fix text replacement alist
authorjustbur <justin@burkett.cc>
Thu, 2 Jul 2015 23:08:15 +0000 (19:08 -0400)
committerjustbur <justin@burkett.cc>
Thu, 2 Jul 2015 23:12:00 +0000 (19:12 -0400)
Conflicts:
which-key.el

which-key.el

index bec94a768e968bf763b89ee9ccbcd20a6e8c8fff..ff437e83ae8c848fe97af4a26267e26b47b93ab8 100644 (file)
   '((">". "") ("<" . "") ("left" ."←") ("right" . "→"))
   "The strings in the car of each cons cell are replaced with the
   strings in the cdr for each key.")
-(defvar which-key-description-replacement-alist nil
+(defvar which-key-general-replacement-alist nil
   "See `which-key-key-replacement-alist'. This is a list of cons
-  cells for replacing the description of keys (usually the name
-  of the corresponding function).")
+  cells for replacing any text, keys and descriptions. You can
+  also use elisp regexp in the car of the cells.")
 (defvar which-key-buffer-name "*which-key*"
   "Name of which-key buffer.")
 (defvar which-key-buffer-position 'bottom
@@ -92,9 +92,13 @@ length."
 which is an alist where the car of each element is the text to
 replace and the cdr is the replacement text. "
   (dolist (rep replacements)
-    (save-excursion
-      (while (search-forward (car rep) nil t)
-        (replace-match (cdr rep) nil t)))))
+    (let ((trunc-car (which-key/truncate-description (car rep)))
+          old-face)
+      (save-excursion
+        (while (or (search-forward (car rep) nil t)
+                   (search-forward trunc-car nil t))
+          (setq old-face (get-text-property (match-beginning 0) 'face))
+          (replace-match (propertize (cdr rep) 'face old-face) nil t))))))
 
 (defun which-key/get-vertical-buffer-width (max-len-key max-len-desc)
   (min which-key-vertical-buffer-width (+ 3 max-len-desc max-len-key)))
@@ -148,11 +152,12 @@ replace and the cdr is the replacement text. "
                                   unformatted)))
         (with-current-buffer (get-buffer which-key--buffer)
           (erase-buffer)
-          (setq vertical-buffer-width (which-key/get-vertical-buffer-width max-len-desc max-len-key))
-          (setq buffer-line-breaks
+          (setq vertical-buffer-width
+                (which-key/get-vertical-buffer-width max-len-desc max-len-key)
+                buffer-line-breaks
                 (which-key/insert-keys formatted (unless bottom-or-top vertical-buffer-width)))
           (goto-char (point-min))
-          (which-key/replace-strings-from-alist which-key-description-replacement-alist)
+          (which-key/replace-strings-from-alist which-key-general-replacement-alist)
           (if bottom-or-top
               (setq buffer-height (+ 2 buffer-line-breaks))
             (setq buffer-width vertical-buffer-width)))